package com.Day9;

/**
 * @author: 若若叶
 * @date: 2021/7/17 12:52
 * FileName: Army
 * Description: 军队类 有一个武器数组，可以添加武器。
 * shootAll()让所有能射击的武器射击
 * moveAll()让所有可以移动的武器移动
 */
public class Army {
    /**
     * 武器的数组
     */
    private Weapon[] weapons;

    /**
     * 军队的构造函数
     * @param count  武器的数量
     */
    public Army(int count) {
        weapons = new Weapon[count];
    }

    /**
     * 添加武器
     * @param weapon  添加武器的类型
     * @throws WeaponAddException  武器添加失败的异常
     */
    public void addWeapon(Weapon weapon) throws WeaponAddException {
        for (int i = 0; i < weapons.length; i++) {
            //武器数组初始化后每个值都为null，为null就代表有空位，可以添加
            if (null==weapons[i]){
                weapons[i] = weapon;
                return;
            }
        }
        //抛出异常
        throw new WeaponAddException("武器库已满，添加失败。");
    }

    /**
     * 令所有可以射击的武器射击
     */
    public void shootAll(){
        for (int i = 0; i < weapons.length; i++) {
            //判断是否为Shootable类型
            if (weapons[i] instanceof Shootable){
                //强转为Shootable类型
                Shootable shootable = (Shootable) weapons[i];
                //调用shoot方法
                shootable.shoot();
            }
        }
    }

    /**
     * 所有能移动的武器移动
     */
    public void moveAll(){
        for (int i = 0; i < weapons.length; i++) {
            //判断是否为Movable类型
            if (weapons[i] instanceof Movable){
                //强转为Movable类型
                Movable movable = (Movable) weapons[i];
                //调用move()方法
                movable.move();
            }
        }
    }
}
